package com.itly.rwgh.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.itly.rwgh.pojo.Code;
import com.itly.rwgh.pojo.DataTemp;
import com.itly.rwgh.pojo.Result;
import com.itly.rwgh.service.WeatherAcquisitionService;
import com.itly.rwgh.utils.GetKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: 罗言
 * @Version: 1.0
 * @Date: 2023-11-21-12:36
 * @Description: 实时天气获取(高德地图)
 */
@Controller
@RequestMapping("/weathers")
public class WeatherAcquisitionController {

    @Autowired
    private WeatherAcquisitionService weather;

    /**
     * 贵阳市天气
     * @return 返回值
     */
    @GetMapping("/getData1")
    @ResponseBody
    public Result getData1() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_GY), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------贵阳市------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        System.out.println(get);
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 1);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(1);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 南明区天气
     * @return 返回值
     */
    @GetMapping("/getData2")
    @ResponseBody
    public Result getData2() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_NMQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------南明区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 2);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(2);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 云岩区天气
     * @return 返回值
     */
    @GetMapping("/getData3")
    @ResponseBody
    public Result getData3() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_YYQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------云岩区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 3);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(3);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 花溪区天气
     * @return 返回值
     */
    @GetMapping("/getData4")
    @ResponseBody
    public Result getData4() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_HXQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------花溪区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 4);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(4);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 乌当区天气
     * @return 返回值
     */
    @GetMapping("/getData5")
    @ResponseBody
    public Result getData5() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_WDQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------乌当区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 5);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(5);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 白云区天气
     * @return 返回值
     */
    @GetMapping("/getData6")
    @ResponseBody
    public Result getData6() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_BYQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------白云区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 6);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(6);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     * 观山湖区天气
     * @return 返回值
     */
    @GetMapping("/getData7")
    @ResponseBody
    public Result getData7() {
        String get = "出错了";
        try {
            get = weather.getData(getUrl(Code.CITY_GSHQ), "GET");
        } catch (Exception e) {
            System.out.println("------请检查网络------ ???" + get);
        }
        System.out.println("--------------观山湖区------------------");
        // 判断GET请求长度是否大于3， 否则调用数据库缓存数据
        if(get.length() > 3) {
            JSONObject jsonObject = JSON.parseObject(get);
            System.out.println("---------实时数据-----------------" + jsonObject);
            // 把数据缓存到数据库中 --唯一id == 1代表贵阳市
            boolean update = weather.update(get, 7);
            System.out.println("--------更新数据: 结果" + update);
            return new Result(jsonObject != null ? Code.GET_OK : Code.GET_ERR, jsonObject);
        }
        // 实时数据查询获取失败，获取数据库缓存数据
        DataTemp temp = weather.getInfo(7);
        JSONObject jsonObject2 = JSON.parseObject(temp.getData().toString());
        System.out.println("----------数据库缓存数据-----------" + jsonObject2);
        return new Result(jsonObject2 != null ? Code.GET_OK : Code.GET_ERR, jsonObject2);
    }

    /**
     *  封装url
     * @param key 城市编码
     * @return 返回值
     */
    public String getUrl(Integer key) {
        return "https://restapi.amap.com/v3/weather/weatherInfo?city=" + key + "&key=" + GetKey.getKey();
    }
}
